/*
 * @Descripttion: 
 * @version: V1.0.0
 * @Author: BaiYayong
 * @Date: 2024-08-06 10:25:48
 * @LastEditTime: 2024-08-07 15:50:33
 */
/* 
  使用该类应开启以下权限（读取和写入）
  <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
 */
/**
 * 获取手机内置存储的根路径
 * @return {String}
 */
const root = function() {
	const environment = plus.android.importClass("android.os.Environment");
	return environment.getExternalStorageDirectory();
}
/**
 * 创建文件夹
 * @return {boolean} flase=失败（已存在、操作失败），true=成功
 */
const mkdirs = function(path = '') {
	return new Promise((resolve, reject) => {
		plus.android.requestPermissions([
			'android.permission.WRITE_EXTERNAL_STORAGE',
			'android.permission.READ_EXTERNAL_STORAGE'
		], () => {
			const File = plus.android.importClass('java.io.File');
			let file = new File(path);
			if (!file.exists()) {
				resolve(file.mkdirs());
			} else {
				resolve(true); // 如果文件夹已经存在，则视为成功
			}
		}, error => {
			uni.showToast({
				title: '无法获取权限，文件下载将出错！',
				icon: 'none',
			});
			reject(error);
		});
	});
}
// File.js 新增二进制写入方法
const writeBinaryFile = function(path, byteArray) {
	const File = plus.android.importClass('java.io.File');
	const FileOutputStream = plus.android.importClass('java.io.FileOutputStream');

	try {
		const file = new File(path);

		// 确保父目录存在
		const parentDir = file.getParentFile();
		if (!parentDir.exists()) {
			parentDir.mkdirs();
		}

		// 写入字节数据
		const fos = new FileOutputStream(file);
		fos.write(byteArray);
		fos.flush();
		fos.close();
		return true;
	} catch (e) {
		console.error('二进制写入失败:', e);
		return false;
	}
}

// 修改 writeTxt 方法支持二进制写入
const writeFile = function(path = '', content, append = false, charset = 'binary') {
	const File = plus.android.importClass('java.io.File');
	const FileOutputStream = plus.android.importClass('java.io.FileOutputStream');

	let file = new File(path);
	try {
		// 确保父目录存在
		const parentDir = file.getParentFile();
		if (!parentDir.exists()) {
			parentDir.mkdirs();
		}

		// 写入二进制数据（兼容文本和字节）
		const fos = new FileOutputStream(path, append);
		if (typeof content === 'string') {
			fos.write(content.getBytes(charset));
		} else {
			fos.write(content); // 直接写入字节数组
		}
		fos.close();
		return true;
	} catch (e) {
		console.error("文件写入失败:", e);
		return false;
	}
}
/**
 * 写入文件内容
 * @param {String} path 文件路径
 * @param {String} content 内容
 * @param {boolean} append 内容写入类型，false=不追加（覆盖原有内容），true=追加（从内容尾部写入）
 * @param {String} charset 编码
 * @return {boolean} true=成功，false=失败
 */

const writeTxt = function(path = '', content = '', append = false, charset = 'utf-8') {
	const File = plus.android.importClass('java.io.File');
	const FileOutputStream = plus.android.importClass('java.io.FileOutputStream');
	const OutputStreamWriter = plus.android.importClass('java.io.OutputStreamWriter');

	let outputStreamWriter;
	let file = new File(path);

	try {
		// 确保文件所在的文件夹存在
		const parentDir = file.getParentFile();
		if (!parentDir.exists()) {
			parentDir.mkdirs(); // 创建目录及子目录
		}

		// 不存在则创建新的文件
		if (!file.exists()) {
			file.createNewFile();
		}

		outputStreamWriter = new OutputStreamWriter(new FileOutputStream(path, append), charset);
		outputStreamWriter.write(content);
		outputStreamWriter.close();
	} catch (e) {
		if (outputStreamWriter != null) {
			outputStreamWriter.close();
		}
		console.error("写入文件失败:", e);
		return false;
	}
	return true;
}


// const writeTxt = function (path = '', content = '', append = false, charset = 'utf-8') {
//   const File = plus.android.importClass('java.io.File');
//   const FileOutputStream = plus.android.importClass('java.io.FileOutputStream');
//   const OutputStreamWriter = plus.android.importClass('java.io.OutputStreamWriter');

//   let outputStreamWriter;
//   let file = new File(path);
//   try {
//     //不存在则创建新的文件
//     if (!file.exists()) {
//       file.createNewFile();
//     }
//     outputStreamWriter = new OutputStreamWriter(new FileOutputStream(path, append), charset);
//     outputStreamWriter.write(content);
//     outputStreamWriter.close();
//   } catch (e) {
//     if (null != outputStreamWriter) {
//       outputStreamWriter.close();
//     }
//     return false;
//   }
//   return true;
// }
export default {
	root,
	mkdirs,
	writeTxt,
	writeFile,
	writeBinaryFile
}